package main

import (
	"context"
	"OldPackageTest/c_grpc_develop/a_grpc_test/proto"
	"google.golang.org/grpc"
	"net"
)

type Server struct {
	proto.UnimplementedGreeterServer
}

func (s *Server) SayHello(ctx context.Context, request *proto.HelloRequest) (*proto.HelloReply,
	error) {
	return &proto.HelloReply{
		Message: "hello " + request.Name,
	}, nil
}

func main() {
	g := grpc.NewServer()
	proto.RegisterGreeterServer(g, &Server{})
	lis, err := net.Listen("tcp", "0.0.0.0:8088") // 监听 8088 端口
	if err != nil {
		panic("failed to listen:" + err.Error())
	}
	// Serve 在侦听器 lis 上接受传入的连接，为每一个都建立一个新的 服务的传输 和 服务的协程
	// 服务 管理 gRPC请求，然后调用已注册的处理程序对它们进行回复
	// Serve 返回给 lis, 如果接受带有致命错误的失败. 当这个方法返回时, Lis 也将被关闭
	// 如果想要停止 服务 除非调用 Stop 或 GracefulStop, 否则 Serve 将返回一个 非 nil 错误
	// 除非调用 Stop 或 GracefulStop, 否则Serve将返回一个非nil错误
	err = g.Serve(lis)
	if err != nil {
		panic("failed to start grpc:" + err.Error())
	}
	g.GracefulStop()
}
